package com.ruoyi.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.domain.entity.SysModule;

import java.util.List;

/**
 * 功能模块-角色-数据权限关联表 服务层
 */
public interface ISysModuleService {
    /**
     * 根据表名查询功能模块（默认权限）
     *
     * @param tableName 表名
     * @return 功能模块
     */
    public SysModule getModuleByTableName(String tableName);

    /**
     * 根据表名和角色ID查询功能模块权限配置
     *
     * @param tableName 表名
     * @param roleIds   角色ID列表
     * @return 功能模块列表
     */
    public List<SysModule> getModuleByTableNameAndRoleIds(String tableName, List<Long> roleIds);

    /**
     * 分页查询功能模块配置
     *
     * @param page   分页对象
     * @param module 功能模块
     * @return 分页结果
     */
    public IPage<SysModule> selectModuleList(IPage<SysModule> page, SysModule module);

    /**
     * 根据模块ID查询模块详情
     *
     * @param moduleId 模块ID
     * @return 模块详情
     */
    public SysModule selectModuleById(Long moduleId);

    /**
     * 新增功能模块配置
     *
     * @param module 功能模块
     * @return 结果
     */
    public int insertModule(SysModule module);

    /**
     * 修改功能模块配置
     *
     * @param module 功能模块
     * @return 结果
     */
    public int updateModule(SysModule module);

    /**
     * 删除功能模块配置
     *
     * @param moduleIds 模块ID列表
     * @return 结果
     */
    public int deleteModuleByIds(Long[] moduleIds);

    /**
     * 删除单模块数据
     * @param moduleId
     * @return
     */
    public int deleteModuleById(Long moduleId);

    /**
     * 检查模块名称是否唯一
     *
     * @param module 功能模块
     * @return true：唯一 false：已存在
     */
    public boolean checkModuleNameUnique(SysModule module);

    /**
     * 检查关联表名是否唯一
     *
     * @param module 功能模块
     * @return true：唯一 false：已存在
     */
    public boolean checkTableNameUnique(SysModule module);

    /**
     * 查询某表对应的单模块
     * @param menuName
     * @return
     */
    SysModule getDefaultModuleByModuleName(String menuName);
}